約 4,425,939 件
https://w.atwiki.jp/easybotter_wiki/pages/17.html
PHPへ手を付ける前に PHPへ着手するにあたって自宅サーバー上でテストしてみる 段差を付けよう! PHPへ手を付ける前に 正規表現(メタ文字) 演算子 比較演算子 条件分岐(if、switch) date関数 以上の知識があるとここで紹介している機能の他、色々な改造が出来るようになります。 興味がある方はPHPを勉強してみるのもいいかもしれません。 Twitter Bot関連リンクでPHP解説サイトを紹介していますので、そちらを参考に。 data関数はPHPマニュアルに簡易リストがあります。 PHPへ着手するにあたって まずはbot.phpに書かれている説明と公式サイトの"基本の設定"解説を熟読しましょう。 設置手順 前準備~設置編でも紹介したように、PHP対応のテキストエディタを使用しよう。~~構文チェック機能付きが望ましいです。 自宅サーバー上でテストしてみる EasyBotter.phpやbot.phpを編集する前に、自宅サーバー上で構文テストしてみることをお勧めしたい。 easyPHP等が手軽でお勧め(skypeなど、ポート80を使用している他プログラムは終了させる。) ↓ 例:午前と午後の発言を変えたい! if(date("a") == "am"){ $response = $eb- postRandom("am.txt"); }else{ $response = $eb- postRandom("pm.txt"); } とbot.phpへ記述したい。 bot.phpを編集する前に、自宅サーバー上に適当なphpファイル(例:test.php)を作って ?php if(date("a") == "am"){ echo "午前ですよ~"; }else{ echo "午後ですよ~"; } ? と記述し、保存。自宅サーバーで動かしてみる(アクセスしてみる。) 正常に機能し(コメントが表示され)ていればbot.phpへ導入させてみる! ※bot.phpを自宅サーバー上で動かすには、それなりに環境設定する必要があります。 段差を付けよう! if{}else{}沢山使っていると、何処で{}を閉じたか・閉じてないかがややこしくなってきます。 そんな時はTABキーや空白文字で段差を付けて整理しよう。 if(date("i") % 15 === 0){ if(date("H") 21){ $randOPfile = "txtlog.dat"; if(date("i") 5){ $post_randOP = rand(0,21); $fp = fopen($randOPfile, "w"); @fwrite( $fp, $post_randOP, strlen($post_randOP) ); fclose($fp); } $contents = @file_get_contents($randOPfile); }else{ $contents = date("H"); } $contents = "post_".$contents.".txt"; $response = $eb- postRotation($contents,"──"); } 何がなんだか… TABキーで整理してみよう if(date("i") % 15 === 0){ if(date("H") 21){ $randOPfile = "txtlog.dat"; if(date("i") 5){ $post_randOP = rand(0,21); $fp = fopen($randOPfile, "w"); @fwrite( $fp, $post_randOP, strlen($post_randOP) ); fclose($fp); } $contents = @file_get_contents($randOPfile); }else{ $contents = date("H"); } $contents = "post_".$contents.".txt"; $response = $eb- postRotation($contents,"──"); } 見やすくなったよね?これで記述ミスも少なくなる…はず。
https://w.atwiki.jp/easybotter_wiki/pages/31.html
//通常のフォローユーザ、特定のユーザ、Bot、ごとにタイムライン反応用パターンファイルを変えるサンプルです。 //Bot宛に決まった台詞で話しかけることで特定のユーザリストに追加されます。 //タイムライン反応を作成するときに、特定のユーザリストを見て、反応ファイルを変更します。 //動作保証はしません //EasyBotter 本体 //==================== //function makeReplyTweets //冒頭($replyTweets = array(); のあとあたり)に以下の2行を追加 $aryAdduser = array(); $aryDeluser = array(); //「if(empty($status) || $status == "[[END]]"){」の前に以下を追加 //タイムライン反応するユーザリストに追加 if (stristr($status, "[[REPTL]]")) { $user = (string)$reply- user- screen_name; $aryAdduser[] = $user; $status = str_replace("[[REPTL]]", "", $status); } //タイムライン反応するユーザリストから削除 if (stristr($status, "[[NOREPTL]]")) { $aryDeluser[] = (string)$reply- user- screen_name; $status = str_replace("[[NOREPTL]]", "", $status); } //「return $replyTweets;」の前に以下を追加 //-------------------- //タイムライン反応ユーザのファイルへの追加と削除 $userfname = "replyTLusers.txt"; if (count($aryAdduser) 0 || count($aryDeluser) 0) { if (file_exists($userfname) == false) { touch ($userfname); chmod($userfname, 606); } $buf = file($userfname); $fp = fopen($userfname, "a+"); flock($fp, LOCK_EX); $users = array(); foreach($buf as $u) { $u = trim($u); array_push($users, $u); } //追加 $users = array_merge($users, $aryAdduser); $users = array_unique($users); //削除 foreach ($aryDeluser as $u) { for ($i = 0; i count($users); $i++) { if (strcmp($users[$i], $u) == 0) { unset($users[$i]); break; } } } //ファイルへの書き込み ftruncate($fp, 0); foreach ($users as $u) { fputs($fp, $u."\n"); } fclose($fp); } //-------------------- //==================== //makeReplyTimelineTweets //「$replyTweets = array();」の前に以下を追加する $org_repfile = $replyPatternFile;//デフォルトのファイル名を保管 //「//リプライパターンと照合」の前に以下を追加する //ユーザリストを読み込む。 $fname = "replyTLusers.txt"; $users = array(); if (file_exists($fname)) { $tmp = file($fname); foreach($tmp as $u) { $users[] = trim($u); } } //■■特定の人には別パターン■■ $userName = (string)$tweet- user- screen_name; switch(true){ case stristr($userName, "bot") //botと名のつくアカウント名に対して $replyPatternFile = "bot_pattern.php";//bot_pattern.phpを適用する $this- _replyPatternData[$replyPatternFile] = $this- readPatternFile($replyPatternFile); break; case in_array($userName, $users) echo " $userName - 特定ユーザ用反応 $text br / "; $replyPatternFile = "xxx_pattern.php"; //xxx_pattern.phpを適用する $this- _replyPatternData[$replyPatternFile] = $this- readPatternFile($replyPatternFile); break; default //それ以外 echo " $userName - デフォルト反応 $text br / "; $replyPatternFile = $org_repfile; //デフォルトのパターンファイル名 } //==================== //==================== //通常の@でリプライを返すパターンファイルに以下を追加。台詞などは適時変更OK。[[NOREPTL]] と [[REPTL]] が入っていることが必要。 "話し?かけないで" = array( "[[NOREPTL]]{name}さんにたくさん話しかけるのをやめます。", ), "話し?かけて" = array( "[[REPTL]]{name}さんにたくさん話しかけます。", ),
https://w.atwiki.jp/easybotter_wiki/pages/25.html
※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメント」から誰かに頼んで下さい。 ランダムPOSTを●分おき、リプライを▲分おきにしたい! [#ra5d511d]リプライ [#c8e65725] ランダムPOST [#nd87a60d] 時間別にリプライorPOSTを分けたい! [#b7bf333f] 落とし穴に注意 [#rf62e452] 落とし穴に注意2…CRONと設置サーバーの時間がズレているズレを知る ズレに対処する 指定した時間に実行の処理が終わらない 脱初心者してから考える事動作テストにも使える代入演算子 落とし穴に注意3…演算子「%」の理解演算子「%」とは? 演算子「%」の有効活用 コメント [#n0b1997d] ランダムPOSTを●分おき、リプライを▲分おきにしたい! [#ra5d511d] ここではランダムPOSTを30分おき、リプライを2分おきで考えます(※cronは2分間隔設定にする。) リプライ [#c8e65725] リプライ間隔はcronの間隔と同じなので、何か条件付けるということはしなくてOKです。 bot.phpに $response = $eb- reply(2,"data.txt","reply_pattern.php"); を追加してあげましょう。 ランダムPOST [#nd87a60d] bot.php内でも解説されている通り //bot.phpを実行したときに、0分、15分、30分、45分だったら実行される if(date("i") % 15 == 0){ $response = $eb- postRandom("data.txt"); } を使っていきます。 date("i")と言うのは、現在の時刻・○時△分の△部分を表します。 ほかにもdate("G")やdate("Y")等色々な現在時刻を表すものがあります。 詳しくは各自ここで調べて下さい。(外部リンク:http //www.php.net/manual/ja/function.date.php) % 15 == 0と言うのは、事前のdate("i")が15で割り切れることを意味します。 ここはifなので、bot.phpへアクセスした時、15で割り切れる時間(分)のみ{}の中身を実行します。 bot.phpへアクセスした時の時間が0分(60分)と15分、30分、45分だった時、いずれも15で割り切ることが出来ますね。 では今回は30分おきに設定したかったので if(date("i") % 30 == 0){ $response = $eb- postRandom("data.txt"); } と書いてみます。こうすると0(60)分と30分の時のみ実行されます。1時間に2回実行させることになります。 目的達成です! ここで注意したいのは、リプライの記述をif{}内に入れないことです。 リプライの記述まで{}へ入れてしまっては、リプライまで30分おきになってしまいます。 時間別にリプライorPOSTを分けたい! [#b7bf333f] 上の「ランダムPOSTを●分おき、リプライを▲分おきにしたい!」でdate("i")が現在の時刻○時△分の△部分だというのは分かりました。 今回は朝(6~10時)morning.txtと昼(11~15時)noon.txt、夜(16~0時)evening.txt、深夜(1~5時)night.txtそれぞれ別のPOSTをさせてみましょう。 ただし今回は△分ではなく○時なので、date("i")は使えません。○時はdate("G")を使用します。 24時間表記ですが、24という数値はありません。24時は0時扱いになります。 まずは朝の部分。現在の時刻・○時の○部分が6~10の時。 if(date("G") 5 date("G") 11){ $response = $eb- postRandom("morning.txt"); } これは「もし、現在時刻が5時より大きく、11よりも小さい時」と言うifの条件式になります。 「 」は「and」でも構いません。英字の通り「かつ」と言う意味があります。 注意したいのは不等号!これは算数レベルで考えてください。 例 全角 説明 A 5 A>5 Aは5より大きい。つまり6~23。 A 5 A<5 Aは5より小さい。つまり0~4。 A =5 A≧5 Aは5以上。つまり5~23。 A =5 A≦5 Aは5以下。つまり0~5。 次に昼の部分。現在の時刻・○時の○部分が11~15の時。 if(date("G") 10 date("G") 16){ $response = $eb- postRandom("noon.txt"); } でも良いのですが… if(date("G") 5 date("G") 11){ $response = $eb- postRandom("morning.txt"); }else if(date("G") 10 date("G") 16){ $response = $eb- postRandom("noon.txt"); } とelseを付けて朝の部分とくっ付けてあげるとすっきりします。 elseは、先のif条件(朝)に合わなかった場合else以降を実行しようとします。 次に夜の部分。現在の時刻・○時の○部分が16~24の時。 if(date("G") 15 date("G") 1){ $response = $eb- postRandom("evening.txt"); } ここまで来ると、やってしまいがちですが…これは大きな間違い!!! これでは「15より大きくて、1より小さい」というありえない条件になってしまいます。 if(date("G") 15 || date("G") 1){ $response = $eb- postRandom("evening.txt"); } としてやることで「現在時刻が15より大きい、または1より小さい場合」となります。 「||」は「or」でも構いません。英字の通り「または」と言う意味があります。 if(date("G") 5 date("G") 11){ $response = $eb- postRandom("morning.txt"); } else if(date("G") 10 date("G") 16){ $response = $eb- postRandom("noon.txt"); } else if(date("G") 15 || date("G") 1){ $response = $eb- postRandom("evening.txt"); } 繋げるとこんな感じです。 次に深夜の部分。現在の時刻・○時の○部分が1~5の時。 if(date("G") 0 date("G") 6){ $response = $eb- postRandom("night.txt"); } としてあげてもいいのですが…今まで6~10,11~15,16~24時までは指定してきました。 残りの時間はこの1~5時しかないので、わざわざ条件を書いてやることはないのです。 if(date("G") 5 date("G") 11){ $response = $eb- postRandom("morning.txt"); } else if(date("G") 10 date("G") 16){ $response = $eb- postRandom("noon.txt"); } else if(date("G") 15 || date("G") 1){ $response = $eb- postRandom("evening.txt"); } else { $response = $eb- postRandom("night.txt"); } で完成です! リプライも同様に条件付けてあげることで、時間別パターン可能です。 落とし穴に注意 [#rf62e452] if(date("i") % 30 === 0){ はdate("i")が30で割り切れる分数、というのを解説しました。 これを30分おき等、分数ではなく1時間毎にしたい。 if(date("G") % 1 === 0){ と書く人をよく質問スレで見かけます。 これは大きな間違いです。 詳しく書くと……… if(date("i") % 30 === 0){ は0,30分に動くことになりますね。 ここでもしcronが2分毎ではなく10秒毎にアクセスするとしたら。 毎時0分(30分)の0秒、10秒、20秒、30秒、40秒、50秒すべての秒数で作動してしまうのです。 これは、cronが分数おきだからこそ使える書き方なのです。 if(date("G") % 1 === 0){ と書いてしまうと、cronが2分毎だった場合、毎時の0,2,4,6,,,,,,,,,,,,58分と2分毎に作動してしまいます。 0分きっちりに作動させたいなら、難しく考えず if(date("i") == "0"){ としてしまえばオッケーです。 落とし穴に注意2…CRONと設置サーバーの時間がズレている 掲示板でも多い質問の一つに「リプライは動いてるけど時間分け指定をしたら通常ポストしなくなった」というものがあります。 特に見られる理由は下記3点です。 1:if・switchなどの内容が間違っている ……慣れた人でも凡ミスをすることがあるので一つずつ再確認しましょう 2:CRONがbot.phpにアクセスする時間外を指定している ……「CRONは2分毎なのにbot.phpでは3分毎の設定」などちぐはぐでは?指定時間を揃えましょう 3:CRONと設置サーバーの時間がズレている ……どのくらいのズレがあるのか確認して適切に処置しましょう ここでは3番の対処を説明します。 ズレを知る CRONと設置サーバーの時間のズレを確認するための下準備をします。 (data.txtやbot.phpの内容を既に変更している場合は適宜ファイル名を変更して対応してください) data.txtの内容(この1行のみ) {hour}時{minute}分{second}秒 bot.phpの実行内容(下記以外のリプライ・TL反応・ポスト・フォロー返し等はコメントアウトする) $response = $eb- postRandom("data.txt"); CRONの設定 5分毎、10分毎など、CRON提供側で許容されている範囲内で設定します。 1分毎・2分毎での設定はズレを計るのに向きません、できれば0分・5分・10分…という0分始まりの5分毎をオススメします。 ここまでが下準備です。 実際にCRONを起動させ、「●時●分●秒」というポストが数回行われるまで待ちます。 文字化けするようであれば文字コード・改行コードを確認、ポストが行われないようであれば指定したbot.phpが正しいURLか確認します。 0分始まりの5分毎の場合、「分」は0もしくは5の倍数でなければなりませんが、これ以外の場合にはズレが生じていることになります。 また、「分」が0もしくは5の倍数であっても「秒」が59秒……など数秒のラグで「分」が変わってしまうような値では不安が残ります。 何分のズレなのか、ズレが生じるのはどの程度の頻度か、等をチェックしたら次の段階です。 ズレに対処する 一番簡単なのはCRONの実行時間をずらして、サーバーの実行時間に合わせてやることです。 しかしこの方法では更にズレが生じたり、時間ズレと関係なくサーバーが不安定で実行に時間がかかった場合などに対処しきれません。 そこでbot.phpの時間指定を厳密なものではなく余裕をもった書き方に変えます。 毎時0分にランダムポストしたい場合は下記のように書きますが、 if(date("i") == 0){ $response = $eb- postRandom("data.txt"); } ズレが生じている場合は下記のように余裕をもった時間指定に書き換えます。 //以下は毎時0分~1分の間に実行(2分未満の範囲で遅い場合) if(date("i") = 1){ $response = $eb- postRandom("data.txt"); } //以下は毎時59分か0分に実行(2分未満の範囲で早い場合) if(date("i") == 0 || date("i") == 59){ $response = $eb- postRandom("data.txt"); } このように余裕をもたせることで多くの場合は解決します。 しかし、bot.phpの実行内容を増やしていくと、時には「CRONと設置サーバーにズレがないのに実行されてない?」という事があります。 これについても過去に同様の事例が多くありましたが、多くは下記3つに当てはまります。 1:処理落ち・タイムアウト……設置サーバーの能力を越えているかtwitterが重い場合など 2:ifやswitchの書き方の問題……閉じ忘れや勘違いがないか再確認 3:実行中に指定した時間を過ぎてしまった……bot.phpの書き方や改造で対応 次の項目では3番に当てはまる事例への対処を説明します。 指定した時間に実行の処理が終わらない EasyBotterに慣れてくると、単純な機能だけでなく様々な機能を時間別で組み合わせて実行することも多くなります。 一回に処理する機能が増えれば処理時間は長くなります。 また初期は気にならない処理時間でも、フォロー・フォロワーの増加などで処理時間が長くなることもあります。 まずはbot.phpで指定できる機能がどのような動きをしているかを考えてみましょう。 設置サーバー内の処理だけで済む ・ランダムポスト ・ローテーションポスト ……設置サーバー内のファイルからデータから選んでtwitterに送る twitterから情報を呼び出さなければならないもの ・リプライ ・タイムライン反応 ・自動フォロー返し ……初めにtwitterから情報を呼び出し、その内容を設置サーバー内のファイルと照らし合わせて処理を行い、その結果をtwitterに送る。 twitterが重い場合は呼び出し時点で処理時間を食う。 またリプライ数・タイムラインの速度やフォロワー数などで処理時間が大きく変わる。 上記を踏まえて下記のようなbot.phpを見てみましょう。 //毎回リプライ返し $response = $eb- reply(2,"data.txt","reply_pattern.php"); //毎時0分にランダムポスト if(date("i") == 0){ $response = $eb- postRandom("data.txt"); } この書き方に全く問題はありません、CRONと設置サーバーの時間ズレがなければうまく動くことでしょう。 しかし、時間ズレはないのに定期ポストが不安定になることも予想される書き方でもあります。 その理由は「プログラムの常識」にあります。 プログラムは上から順に実行されていきます。 つまり毎時0分には、「リプライ返しを全て終えてからランダムポストをする」という順番になります。 「リプライ返し」は先に説明した通り「ランダムポスト」よりtwitterと情報をやり取りする回数が多く、twitterの重さや送られてくるリプライの量によって処理にかかる時間が左右されやすいものです。 つまりCRONが0分ちょうどにbot.phpを叩いたとしても、「リプライ返し」の処理に時間がかかり過ぎてしまい「ランダムポスト」の処理にとりかかった時点で0分を過ぎている、という事態が予想できるのです。 つまり //毎時0分にランダムポスト if(date("i") == 0){ $response = $eb- postRandom("data.txt"); } //毎回リプライ返し $response = $eb- reply(2,"data.txt","reply_pattern.php"); このような書き方にすると、ランダムポストから処理が始まるので、CRONが定刻通りであれば順当に処理が行われるのです。 ただし、レンタルサーバーによっては「●秒以上実行し続けているプログラムは処理途中であっても終了させる」という機能や規約が設定されている場合もあります。 また、処理量がサーバーの処理能力を越えてしまうとダウンする可能性もあります。 このような場合にはプログラム自体を軽くしたり、処理を分散させる努力、またはサーバーを変更する必要が求められます。 脱初心者してから考える事 ifやswitchでの時間わけ設定が増えてくるとどうしても処理時間が長くなりがちです。 脱初心者したら処理の効率化ができるよう、bot.phpの書き方を工夫してみましょう。 脱初心者したばかりの方にとって最も簡単で有効な処理の効率化は「date関数の呼び出し回数を減らす」ことです。 date関数は時間を呼び出すdate("G")やdate("i")だけでなく、月を呼び出すdate("n")、日にちを呼び出すdate("j")など様々なものがあります。 年月日・曜日・時間などを多用することで様々な指定ができる代わりに、逐一date関数の内容をサーバーに問い合わせ呼び出す動作が増えてしまうので処理速度が低下します。 また、bot.phpの記述内容が増えるに従って一番下の方に書かれたものが時間外になってしまう可能性も高くなります。 そこで、処理を指定する前に時間をEasyBotterに記憶させて処理速度を上げてみましょう。 //date("i")を$minuteに代入する $minute = date("i"); //毎回リプライ返し $response = $eb- reply(2,"data.txt","reply_pattern.php"); //毎時0分にランダムポスト if($minute == 0){ $response = $eb- postRandom("data.txt"); } 代入演算子「=」は、 「A = B」の時「BをAに代入する」 という意味を持ちます。 比較演算子である「==」「===」とはまったく異なるので注意が必要です。 この場合date("i")、つまり分を$minuteという関数に代入しています。 同様の方法でdate関数は全て代入することができます、$minute・$hour・$monthなどのように重複しない範囲で関数の名前をつけることができます。 date関数を他の処理より先に関数へ代入することで、CRONがbot.phpを叩いた時刻や日付等をその処理が終わるまでの間記憶してくれます。 つまり、先に時間がかかる処理をした後や大量のifやswitchを経た最下部の処理でも、「CRONがbot.phpを叩いた時点」の時刻として処理を進めることが可能となるのです。 動作テストにも使える代入演算子 上記で説明した代入演算子を利用することで、「12月31日限定で動くか」というようなテストもできます。 $month = date("n"); $day = date("j"); 本来は上記のようにdate関数を代入しますが、 $month = 12; $day = 31; このように、ダイレクトな値を代入することで仮想の12月31日の状況にすることができますし、違う値を入れれば「12月31日以外では動かないか」のテストもできます。 いずれの場合も初心者のうちに手を出すべきものではありません、ある程度EasyBotterの挙動そしてPHPに慣れた上ですべきことですが、これらを理解しこなせるようになれば中級者の仲間入りの第一歩です。 落とし穴に注意3…演算子「%」の理解 さて、これまでの内容を理解したら構文の中身をもう少し分解してみましょう。 if(date("i") % 15 == 0){ $response = $eb- postRandom("data.txt"); } これまで上記について「15分ごとにランダムポストを実行」と書いていましたが、実際は若干異なり、正確には「0分・15分・30分・45分にランダムポストを実行」となります。 なぜでしょうか、……それは演算子「%」を正しく理解することによって解明できます。 if(date("i") % 15 == 5){ $response = $eb- postRandom("data.txt"); } このように書いても「15分ごとにランダムポストを実行」しますが、「0分・15分・30分・45分にランダムポストを実行」はされません。 なぜでしょうか、……これこそが演算子「%」を使いこなすポイントです。 演算子「%」とは? 演算子「%」はただの割り算ではなく剰余なのです。 剰余と聞くと耳慣れないかもしれませんが、算数的な言い換えをすると「割り算をした時の余り」を求める場合に使う演算子です。 つまり if(date("i") % 15 == 5){ 上記は「分を15で割って余りが5の時」という意味で、「5分・20分・35分・50分の時」という指定となります。 演算子「%」の有効活用 演算子「%」を正しく理解することで活用方法が増えます。 奇数・偶数の振り分けは一々指定しなくても、「% 2」の値が0か1か、という考え方で簡単になります。 //偶数時は、0分始まりで15分ごとに、guusuu.txtからランダムポスト if(date("G") % 2 == 0 date("i") % 15 == 0){ $response = $eb- postRandom("guusuu.txt"); } //奇数時は、5分始まりで10分ごとに、kisuu.txtからランダムポスト else if(date("G") % 2 == 1 date("i") %10 == 5){ $response = $eb- postRandom("kisuu.txt"); } CRONと設置サーバーで時間にズレがある場合でも if(date("i") % 15 == 5 || date("i") % 15 == 6){ このようにすることで「5分・6分・20分・21分・35分・36分・50分・51分」と余裕をもたせた指定にすることができます。 コメント [#n0b1997d] 時間別にリプライorPOSTと同じような感じで、時間別にPOSTしないようにしたいです。何方かよろしくお願いします。 -- 沢谷 (2010-07-26 02 19 00) 沢谷さん>その場合、時間別POSTの応用で$response = $eb- postRandom("");とすればPOSTしません -- 通りすがりのねこ (2010-08-01 21 09 11) もし、if(date("i") == "0"){を使う場合、cronの実行間隔は1分にしなければなりませんか? -- 名無しさん (2010-09-07 16 56 00) もし、if(date("i") == "0"){を使う場合、cronの実行間隔は1分にしなければなりませんか? 回答:その必要はありません -- 通りすがりのねこ (2010-09-09 21 15 34) 時間別POSTを15分おきにしたい場合、例えば時間別は6~10時のみの設定のを15分おき実行だと、if(date("G") 5 date("G") 11 date("i") % 30 === 0) で良いのでしょうか? -- たに (2010-09-19 01 21 04) 夜だけ違うリプライ。bot.php(2) http //livbot.sblo.jp/ の記事が参考になりました。サンプルコード書いてあります。 -- 2時間おきに作動させたい場合 (2010-12-10 05 27 08) 何回かの間隔で、実行したい場合は、カウンターファイルを作る手もあるぞ。パーミッションは666のこと。bot.phpの例で10回間隔で順次投稿したい場合。1間隔1分だと10分間隔です。 function seqnum(){ $iseq = 0; $fname = "count.dat"; $iseq = file_get_contents($fname); if ($iseq = 60) { $iseq = 0; } $iseq = $iseq + 1; file_put_contents($fname,(string)$iseq); //SEQカウンター書き込み echo "参照シーケンス番号 = ".$iseq." br / "; return $iseq; }$iseq = seqnum(); if (($iseq % 10) == 0) { $response = $eb- postRotation("data.txt"); } - koziki_bot (2011-01-28 10 08 59) リプを2分置き、呟きを15分置きにしたかったので「if(date("i") % 15 == 0){ $response = $eb- postRandom("data.txt"); }」と「$response = $eb- reply(2,"data.txt","reply_pattern.php");」を書き込んだのですが上手く動きません。ちなみに「$response = $eb- reply(2,"data.txt","reply_pattern.php");」だけですと正常に動くようです。初心者ながら色々調べてみましたが解決できませんのでもしよければ教えてください。 -- 千紘 (2011-02-20 20 44 36) 千紘さん> cron部分の詳細がないのでわからないですがcronが2分おきなら15分にはcronは起動しないのは分かる? -- 名無しさん (2011-02-20 21 38 41) ランダムPOSTを●分おき~と時間や曜日別にツイートを分ける方法を個別には理解できたのですが、組み合わせ方がわかりません・・・。●曜日の●時から●時まで、●分ごとにツイート(リプライ)という風にしたいのですが・・・何方かよろしくお願いします。 -- 番 (2011-02-21 00 39 31) そーでした、PHPのファイルを時間ごとに自動的に叩くアプリを使っているのでcronは使ってないです。このアプリは自分で作ったのですがどうしようかなあ??興味ある方、ツイッターで質問してみてください。scネームはハンドル名と同じです。 -- koziki_bot (2011-02-21 00 49 39) 回答ありがとうございます。理解しました!2分に合わせたいなら10分置き、15分に合わせたいなら3分置きにするなどどちらでも割れるような値にしなくてはならないということですね。 -- 千紘 (2011-02-21 07 58 19) すみません。曜日と時間で分けて30分ごとにツイートさせたいのですが、 -- 番 (2011-03-08 22 45 13) 途中で切れてしまいましたすみません・・・。曜日と時間で分けて30分ごとにツイートさせるには if(date("i") % 30 === 0){ で30分ごとにツイートするように指定して、switch(true)で case (date("w") == "1″ date("G") "6″ date("w") == "1" date("G") "12") としても出来ないでしょうか? すみませんとても困ってます・・・よろしくお願いします。 -- 番 (2011-03-08 22 52 52) bot.phpはいじってないのですが、2分置きどころかリプライを返してくれません…どうすれば良いのでしょうか? -- 翔 (2011-06-01 22 45 03) bot.phpはそのままで、リプはreply_patternから返すようにしているのに、なぜかdate.txtの言葉から拾って返してしまいます。対処方法を教えて下さい…。 -- 名無しさん (2011-06-02 02 29 36) @pagesかな?Twitterが重いか@pagesの鯖が重かったり障害があるときになるよ。これは@pagesが正常になるのを待つしか無いね -- 名無しさん (2011-07-18 20 26 51) 30分とか割り切れる話をするだけで、40分や90分間隔などの場合を書かないあたり不十分なwikiだなと感じる -- 名無しさん (2011-10-29 13 11 12) ↑40分や90分なら応用でいくらでもやりようがあるし、普通はcronでどうとでもなる。返信が返せないじゃないかならファイルを分ければいいだけのこと -- 名無しさん (2011-11-14 00 53 22) まあ40分は確かにめんどいかもねー。前回のツイート時刻を取得できればちょっと楽かもしれないけど。 -- 名無しさん (2012-04-21 17 59 52) 時間別リプライをしようと思い、「リプライも同様に条件付けてあげることで、時間別パターン可能です」とあるので時間別ランダムポストと同様にこのように時間分けをしたのですがどうも上手く動いてくれません【if( date("G") =1 date("G") = 6 ){$response = $eb- reply(3,"","reply_pattern_night.php");} else{$response = $eb- reply(3,"","reply_pattern.php");}】(ランダムポストは時間分けに成功してます)。ほんとうにこれで動くのでしょうか? -- むー (2012-05-20 05 07 43) ↑bot.phpの記述の順序を入れ替えたら成功しました、お騒がせしてすみません -- むー (2012-05-28 01 05 28) 何時~何時、何曜日~何曜日とpostさせないようにしたいのですが上手く行きません。randompostの上にいかの構文を付け足しました。 "if(date("G") 15 || date("G") 1){ $response = $eb- postRandom("data.txt");" -- PON (2013-06-24 20 01 19) 時間別のリプですが、たとえば6時30分に0630.txtを呟かせたい場合は、 if(date("G I") 6,29 date("G I") 6,31){ $response = $eb- postRandom("0630.txt"); とすればいいのでしょうか? -- MOG (2013-09-22 15 56 03) 名前 コメント
https://w.atwiki.jp/easybotter_wiki/pages/23.html
PHPファイルを編集する上で、基本使いそうなPHP制御構造等はTwitter Bot関連リンクにお勧め解説サイトをリンクしています。 ※wikiの編集が分からなくて、追加してほしい項目がある場合はページ下の「コメントを書く」から誰かに頼んで下さい。 ver.1.42でOAuth認証するにはファイルの用意 Access Tokenの取得 reply_random.phpの編集 post_random.phpの編集 from.phpの編集 備考 ver.1.42でOAuth認証するには phaさんが開放して下さっているもの(EasyBotterから)を使う場合の解説です。 ファイルの用意 PHP+OAuthでTwitterさんで配布されているoauth_test.txtとTwitter API Wiki / OAuth Examplesで配布されているver0.2.0以上のzipファイルをDLして下さい。 zipは解凍して、OAuth.phpとtwitterOAuth.phpだけ使用します。~~oauth_test.txtはoauth_test.phpへ改名して下さい。 reply_random.php等を置いている同ディレクトリ内へアップロードして下さい。 Access Tokenの取得 BOTアカウントでTwitterへログインする。 こちらのページから"OAuth認証について"をクリック。 アプリケーションを許可するか聞かれる→許可をクリック。 その後、転送されたページに表示されている Access Token/Access Token Secretの値2つをメモする。 reply_random.phpの編集 reply_random.php内 //各種設定 chdir(dirname(__FILE__)); require_once("Services/Twitter.php"); require_once( Services/Twitter/Jsphon/Error.php ); require_once("Services/Twitter/Jsphon/Decoder.php"); の直後へ require_once("twitterOAuth.php"); $consumer_key = "WtNt5W6js77cFHvKyVgf6Q"; // Consumer keyの値 $consumer_secret = "h3In28YiiRxtg4PTpkhPmrlJSGOCTG2oh3hslQ"; // Consumer secretの値 $access_token = ""; // Access Tokenの値 $access_token_secret = ""; // Access Token Secretの値 $to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret); $replydata = $to- OAuthRequest( http //twitter.com/statuses/replies.json , array(), GET ); を記入する。 ※↑に先ほど取得したAccess Token/Access Token Secretを記述する。 Consumer Key/Consumer Secretは弄らないで下さい。 その付近にある $st = new Services_Twitter($username, $password); $replydata = $st- getReplies(); を代わりに削除して下さい。 次に //投稿する $in_reply_to_status_id = $replies2[$i]["id"]; $result = $st- setUpdate(array( status = $message, in_reply_to_status_id = $in_reply_to_status_id)); を探し、まるまる //投稿する $in_reply_to_status_id = $replies2[$i]["id"]; $result = $to- OAuthRequest("https //twitter.com/statuses/update.xml",array("status"= $message, in_reply_to_status_id = $in_reply_to_status_id),"POST"); へ変更して下さい。 以上でreply_random.phpの編集は終わりです。 post_random.phpの編集 同じくpost_random.php内 //各種設定 chdir(dirname(__FILE__)); require_once("Services/Twitter.php"); require_once( Services/Twitter/Jsphon/Error.php ); require_once("Services/Twitter/Jsphon/Decoder.php"); の直後へ require_once("twitterOAuth.php"); $consumer_key = "WtNt5W6js77cFHvKyVgf6Q"; // Consumer keyの値 $consumer_secret = "h3In28YiiRxtg4PTpkhPmrlJSGOCTG2oh3hslQ"; // Consumer secretの値 $access_token = ""; // Access Tokenの値 $access_token_secret = ""; // Access Token Secretの値 $to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret); を記入する。 その付近にある $st = new Services_Twitter($username, $password); を代わりに削除して下さい。 次に //twitterに投稿する $result = $st- setUpdate($message); を探し、まるまる //twitterに投稿する $result = $to- OAuthRequest("https //twitter.com/statuses/update.xml",array("status"= $message),"POST"); へ変更して下さい。 以上でpost_random.phpの編集は終わりです。 from.phpの編集 ファイルの中身すべてを削除し html head meta http-equiv="content-type" content="text/html; charset=utf-8" title Twitter手動投稿用フォーム /title /head body center p Twitter手動投稿用フォーム /p p 手動で何か投稿させたいときに使ってください。 /p form action="form.php" method="POST" 発言内容: br / textarea name="message" cols="20" rows="4" /textarea br / input type="submit" name="submit" value="post" / br / /form ?php if(isset($_POST["submit"])){ chdir(dirname(__FILE__)); require_once("Services/Twitter.php"); require_once( Services/Twitter/Jsphon/Error.php ); require_once("Services/Twitter/Jsphon/Decoder.php"); require_once("twitterOAuth.php"); $username = ""; //userid $consumer_key = "WtNt5W6js77cFHvKyVgf6Q"; // Consumer keyの値 $consumer_secret = "h3In28YiiRxtg4PTpkhPmrlJSGOCTG2oh3hslQ"; // Consumer secretの値 $access_token = ""; // Access Tokenの値 $access_token_secret = ""; // Access Token Secretの値 $to = new TwitterOAuth($consumer_key,$consumer_secret,$access_token,$access_token_secret); $message = $_POST["message"]; $result = $to- OAuthRequest("https //twitter.com/statuses/update.xml",array("status"= $message),"POST"); if($result){ echo "Twitterへのpostに成功しました。 br / "; echo "@ a href= http //twitter.com/{$username} target= _blank {$username} /a に投稿したメッセージ:{$message}"; }else{ echo "Twitterへの投稿に失敗しました。パスワードやユーザー名をもう一度チェックしてみてください。 br / "; echo "ユーザー名:@ a href= http //twitter.com/{$username} target= _blank {$username} /a br / "; echo "投稿しようとしたメッセージ:{$message}"; } } ? /center /body /html と書き換えて下さい。 Access Token/Access Token Secretの記述も忘れずに! 備考 このままだと{id}や{timeline_name}と言ったものが使えなくなっています。 reply_random.phpとpost_random.php内 if(preg_match("@{.+?}@",$message) == 1){ //時間などを変換する require_once("Services/convert_text.php"); $message = convert_text($message); //id、名前を変換する //タイムラインからランダムに最近発言した人のデータを取る if(preg_match("@{timeline_id}@",$message) === 1){ $randomTweet = $st- getRandomTweet(20); $message = preg_replace("@{timeline_id}@u",$randomTweet["user"]["screen_name"],$message); } if(preg_match("@{timeline_name}@",$message) === 1){ $randomTweet = $st- getRandomTweet(20); $message = preg_replace("@{timeline_name}@u",$randomTweet["user"]["name"],$message); } //ランダムな一人のfollowerデータを取る if(preg_match("@{id}@",$message) === 1){ $randomFollowersData = $st- getRandomfollowersData(); $message = preg_replace("@{id}@u",$randomFollowersData["screen_name"],$message); } if(preg_match("@{name}@",$message) === 1){ $randomFollowersData = $st- getRandomfollowersData(); $message = preg_replace("@{name}@u",$randomFollowersData["name"],$message); } if(preg_match("@{follower_id}@",$message) === 1){ $randomFollowersData = $st- getRandomfollowersData(); $message = preg_replace("@{follower_id}@u",$randomFollowersData["screen_name"],$message); } if(preg_match("@{follower_name}@",$message) === 1){ $randomFollowersData = $st- getRandomfollowersData(); $message = preg_replace("@{follower_name}@u",$randomFollowersData["name"],$message); } //ランダムな一人のfollowingデータを取る if(preg_match("@{following_id}@",$message) === 1){ $randomFollowingsData = $st- getRandomFollowingsData(); $message = preg_replace("@{following_id}@u",$randomFollowingsData["screen_name"],$message); } if(preg_match("@{following_name}@",$message) === 1){ $randomFollowingsData = $st- getRandomFollowingsData(); $message = preg_replace("@{following_name}@u",$randomFollowingsData["name"],$message); } } をまるまる if(preg_match("@{.+?}@",$message) == 1){ //時間などを変換する require_once("Services/convert_text.php"); $message = convert_text($message); //id、名前を変換する //タイムラインからランダムに最近発言した人のデータを取る if(preg_match("@{timeline_id}@",$message) === 1){ $timeline_id_result = $to- OAuthRequest("http //twitter.com/statuses/user_timeline.xml?count=20",array(),"GET"); preg_match_all("/.*? screen_name (.+?) \/screen_name /is",$timeline_id_result,$timeline_id_kekka,PREG_SET_ORDER); $message = preg_replace("@{timeline_id}@u",$timeline_id_kekka[array_rand($timeline_id_kekka)][1],$message); } if(preg_match("@{timeline_name}@",$message) === 1){ $timeline_name_result = $to- OAuthRequest("http //twitter.com/statuses/user_timeline.xml?count=20",array(),"GET"); preg_match_all("/.*? name (.+?) \/name /is",$timeline_name_result,$timeline_name_kekka,PREG_SET_ORDER); $message = preg_replace("@{timeline_name}@u",$timeline_name_kekka[array_rand($timeline_name_kekka)][1],$message); } //ランダムな一人のfollowerデータを取る if(preg_match("@{id}@",$message) === 1){ $follower_id_result = $to- OAuthRequest("http //twitter.com/statuses/followers.xml?screen_name=",array(),"GET"); preg_match_all("/.*? screen_name (.+?) \/screen_name /is",$follower_id_result,$follower_id_kekka,PREG_SET_ORDER); $message = preg_replace("@{id}@u",$follower_id_kekka[array_rand($follower_id_kekka)][1],$message); } if(preg_match("@{name}@",$message) === 1){ $follower_name_result = $to- OAuthRequest("http //twitter.com/statuses/followers.xml?screen_name=",array(),"GET"); preg_match_all("/.*? name (.+?) \/name /is",$follower_name_result,$follower_name_kekka,PREG_SET_ORDER); $message = preg_replace("@{name}@u",$follower_name_kekka[array_rand($follower_name_kekka)][1],$message); } if(preg_match("@{follower_id}@",$message) === 1){ $follower_id_result = $to- OAuthRequest("http //twitter.com/statuses/followers.xml?screen_name=",array(),"GET"); preg_match_all("/.*? screen_name (.+?) \/screen_name /is",$follower_id_result,$follower_id_kekka,PREG_SET_ORDER); $message = preg_replace("@{follower_id}@u",$follower_id_kekka[array_rand($follower_id_kekka)][1],$message); } if(preg_match("@{follower_name}@",$message) === 1){ $follower_name_result = $to- OAuthRequest("http //twitter.com/statuses/followers.xml?screen_name=",array(),"GET"); preg_match_all("/.*? name (.+?) \/name /is",$follower_name_result,$follower_name_kekka,PREG_SET_ORDER); $message = preg_replace("@{follower_name}@u",$follower_name_kekka[array_rand($follower_name_kekka)][1],$message); } //ランダムな一人のfollowingデータを取る if(preg_match("@{following_id}@",$message) === 1){ $friends_id_result = $to- OAuthRequest("http //twitter.com/statuses/friends.xml?screen_name=",array(),"GET"); preg_match_all("/.*? screen_name (.+?) \/screen_name /is",$friends_id_result,$friends_id_kekka,PREG_SET_ORDER); $message = preg_replace("@{following_id}@u",$friends_id_kekka[array_rand($friends_id_kekka)][1],$message); } if(preg_match("@{following_name}@",$message) === 1){ $friends_name_result = $to- OAuthRequest("http //twitter.com/statuses/friends.xml?screen_name=",array(),"GET"); preg_match_all("/.*? name (.+?) \/name /is",$friends_name_result,$friends_name_kekka,PREG_SET_ORDER); $message = preg_replace("@{following_name}@u",$friends_name_kekka[array_rand($friends_name_kekka)][1],$message); } } へ書き換えて下さい。 これでOAuth認証への切り替えは終了です。お疲れ様でした。テストしてみましょう。 なお"EasyBotterから"の部分を変更したい場合はver.2.0のやり方と変わりませんので、wiki内をみて下さい。
https://w.atwiki.jp/medamayaki/pages/21.html
6孔明bot履歴 →6孔明bot説明書 ■履歴 2011/06/22──作成 通常ポスト、ランダム返信、6姜維botとの会話、を設定 (姜維と会話)蜀の未来/そろそろ眠い/ランダム会話の計/ (返信)初めまして/よろしく/おはよう/おやすみ/行ってらっしゃい/ /ただいま/姜維とランダム会話よろ/ 2011/06/23──会話微調整中、 (姜維と会話)出師表を読み直す会/ (返信)占って/ 2011/06/24──会話微調整中、 (姜維と会話)しりとり/北伐双六/ (返信)暑いー/ 2011/06/25──会話微調整中、 2011/06/26──(返信)ご飯は~孔明/ 2011/06/30──(返信)質問~?/ 2011/07/02──(返信)出師表?/ 2011/07/05──通常post、ランダム返信にストーリー台詞追加 2011/07/06──(返信)お茶下さい(麦酒下さい)/ 2011/07/18──(返信)天気予報/電力情報/ 2011/09/01──(返信)頭痛、歯痛、腹痛他/疲れた (リニューアル)/おはよう、おやすみ、行ってきます、おかえり 2011/09/06──(返信)つ【○○】/ 2011/09/08──(返信)【○○】占い(占って)/ 2011/09/09──(返信)【○○】~献策(建策)/ 2011/09/29──(6猛将伝発売日) 2011/09/30──猛将伝台詞多少返信に追加 2011/10/08──猛将伝台詞通常postに追加(一部) 2011/10/09──(返信)おみくじ/ 2011/10/19──壁紙をハロウィン仕様に変更 2011/10/20──アイコンをハロウィン仕様に変更 2011/10/31──(ハロウィン限定)Trick or treat 2011/11/08──(返信)俳句よろ/ 2011/11/21──(返信)何か喋って(何か言って、台詞よろ、通常ポストよろ)/ 2011/12/08──twittbotからEasyBotterへ移転作業開始 ※いくつか反応語削除 2011/12/09──twittbotからEasyBotterへ移転 2011/12/10──(返信)なう。/「」の鑑定 2011/12/11──クリスマスのお話(季節限定) 2012/1/1──(会話)福笑い、(返信)あけおめ、お年玉 2012/1/11──(返信)宴会よろ 2012/1/13──orochi2仕様一部(三国志関連以外除外)追加 2012/1/17──(返信)「」「」のどっち?、「」「」のどれ?(他) 2012/1/21──背景画像、年賀状仕様→バレンタイン仕様 2012/1/21──(返信)○○座の星占い ※履歴ですが、削除したものは紛らわしいので履歴からも除外中 ■プロフィール履歴 無双6(+猛将伝)仕様孔明bot(非公式)。通常postは公式台詞のみ。返信はそれなりに管理人の解釈、趣味が入った創作だったり、@6kyoibot @6syokaibot @6bachobot と会話したりとか…。合わなかった方はお気軽にさよならして下さい。 (2012/1/13) 無双6(+猛将伝)仕様の孔明(諸葛亮)bot(非公式&ネタバレ) /通常post→公式台詞のみ /返信・会話→管理人の解釈、趣味仕様 /会話→@6kyoibot @6syokaibot @6bachobot他 /orochi2仕様一部追加中
https://w.atwiki.jp/medamayaki/pages/40.html
6王異bot説明書 ※説明書移転しました→http //hane.ciao.jp/medamayaki1/bot/muso08oui テスト中&超作業中 https //twitter.com/#!/6ouibot 超個人的趣味&テスト中。■非公式、ネタバレ。■予定→6猛将伝+orochi2仕様+創作? 関連bot→@orochinemeabot @musotaikobobot @6syokaibot 他 ■仕様他 非公式&ネタバレ 無双orochi2仕様 予定→6猛将伝+orochi2仕様+創作? 会話→酒呑童子bot、太公望bot、ネメアbot、鍾会bot他(予定) ツイログ→http //twilog.org/6ouibot 自分のつぶやきにも反応中 ■反応語 つ❀(つ✿)……花占い(1/8) おやすみ(1/9) 宴会よろ(1/11) はじめまして(1/12) 今日は何曜日?(1/12) つ【○○】(1/12) 酒を渡す(つ「酒」、つ【酒】)(1/19) おやすみ+つ「酒」(1/19) おやすみ+つ❀(つ✿)(1/19) ※ランダム返信 ■TL返信 ※現在、テスト、調整中 西涼の死神(1/10) ※関連botへの反応有 王異さん?????……呼び出せます(1/30) ■会話 酒呑童子(1/10)× 太公望(1/10)× 左伝bot(1/10) 王異(独り言)(1/12) ネメア(宴会)(1/12)× 鍾会(昼食)(1/14) 陸遜名言bot(1/14) 姜維名言bot(1/14) 酒呑童子、ネメア(宴会)(1/14) 酒呑童子(おすすめ瓢箪) (予定) 酒呑童子、太公望、名言bot、他 ■履歴 2012/01/08 作成 公開中(鍵垢は面倒なため) 2012/01/10 EasyBotter仕様に変更(酒呑童子も) 2012/01/12 独り言会話のため、王異botのEasyBotterphpは「自分自身のつぶやきを除外する」部分を削除中 https //twitter.com/#!/musotaikobobot
https://w.atwiki.jp/medamayaki/pages/35.html
無双6鍾会bot説明書 ※説明書移転しました→http //hane.ciao.jp/medamayaki1/bot/muso03sk https //twitter.com/#!/6syokaibot @6syokaibot 私の天下準備中|・ω・`) 無双6(+猛将伝)+orochi2仕様の鍾会bot(非公式&ネタバレ) / 通常post→公式台詞 /返信・会話→超個人的趣味(・ω・`。) / 会話→@6kyoibot @6komeibot @6bachobot @musosyutenbot @musoppoibot @syoukaimeibun他 ■関連→@syoukaimeibun ■仕様他 非公式&ネタバレ フォロー返し→自動 (※スパム系等、適宜ブロックする場合有) 返信→5分 ツイログ→http //twilog.org/6syokaibot 定期会話有→6姜維bot、6孔明bot、6馬超bot、ネメアbot、太公望bot、王異bot、酒呑童子bot、綾御前bot他 備考→関連botと会話多め? ■お知らせ (2012/2/7) 反応語追加→素数よろ、おやつよろ、○○は好き?、○○は△△? (2/9)バレンタイン期間限定機能、ぼちぼち追加中 反応語追加→(2/9)バレンタイン、つ「チョコ」、チョコ頂戴 ■反応語 (12/11)おはよう、おやすみ、俳句よろ、ジャンケン~ぐー(ちょき、ぱー) (12/12)クリスマスのお話(季節限定)、行ってきます、ただいま (12/13)はじめまして、よろしく (12/15)今日(明日)の東京(他)の天気予報 ※「Weather Hacks」(http //weather.livedoor.com/weather_hacks/)使用 毎日午前5時頃にデータ取得 (※現在全都市対応→天気予報対応都市一覧) (12/16)○○なう。 (12/20)詩作よろ (12/21)呼び出す (12/27)「 」「 」のどっち?、「 」「 」「 」のどれ? ※5つまで対応 (12/31)アナグラムよろ つ「 」 ※「」の中身を並び替える (1/1)あけましておめでとう、お年玉よろ(頂戴) (1/11)宴会よろ (1/14)おすすめ昼食よろ(おすすめ昼食?) (1/15)ごきげんよう (2/4)素数よろ つ「 」 ※「 」の中の数字が素数か判定(半角数字のみ) ※桁数一定以上→不明扱い (2/7)おやつよろ(おやつください、お腹減った) (2/7)○○は好き? (2/7)○○は△△? ※例)白馬は馬?(白馬は馬ですか?、ケーキはおいしい?) (2/7)○○が△△? ※例)月がきれいですか?(白馬が馬だと思いますか?) (2/9)バレンタイン、つ「チョコ」、チョコ頂戴(期間限定) ■TL返信 鍾会さん?????……呼び出せます(1/30) ■会話関連 (姜維)鍾会の乱(鍾会列伝)(12/11) (姜維)クリスマスのお話(12/12) (姜維)じゃんけん(12/12) (姜維)俳句(12/12) (姜維)ランダム会話(12/12) (姜維)鑑定(12/12) (孔明)おはよう(12/13) (孔明)おやすみ(12/13) (孔明)相談(12/13) (姜維)昼ご飯(12/14) (孔明)天気予報(12/15) (姜維)夢(12/15) (孔明と姜維のおはよう、俳句追加)(12/19) (姜維)詩作(12/20) (馬超)俳句、orochi2情報 (ネメア)バイアシオン情報他 (鍾会名言)名言botになんとなく(1/6) (姜維名言)名言botになんとなく(1/7) (左伝名言)名言botになんとなく (姜維)宴会(-1/14)(1/7) (太公望)おやつ(1/8) (姜維)星占い(1/18) (馬超)三國志12情報 (酒呑童子)連歌(1/25)(※テスト中) (綾御前)連歌(※テスト中) (姜維)連歌(※テスト中) (綾御前)素数(2/3)(※テスト中) (陸遜)質問(2/7)(※テスト中) ■履歴 2011/12/11 作成(超試運転中) 通常ポスト、ランダム返信、一部返信 2011/12/12 反応語追加、会話追加(姜維)等 Twilog登録、鍵つきやめる twittbot登録、時間指定はこっち 2011/12/13 反応語追加、会話追加(孔明)等 2011/12/14 会話追加(姜維)等 このwikiのデザイン自体変更 2011/12/15 反応語追加、会話追加(孔明)等 天気予報phpにcron使ってこれで全部使用中 2011/12/16 反応語追加等 2011/12/17 微調整(辞書、天気用ディレクトリ追加、移動他) 2011/12/20 twittbot不調、時間指定post(会話)をEasyBotterに移転(試運転中) 反応語追加、 2011/12/21 TL反応追加、反応語追加 2011/12/24 関連bot馬超bot作成、会話追加他 2011/12/27 反応語追加 2012/1/1 反応語追加、会話追加(正月用) 2012/1/5 天気予報改訂(全都市対応→天気予報対応都市一覧) 2012/1/18 星占いをRSSで取得するのをやっと習得、会話テスト開始 bot.phpをほぼ全部書換 2012/1/21 背景画像、年賀状仕様→バレンタイン仕様 2012/1/25 会話、酒呑童子と連歌追加 会話中の俳句、連歌を辞書記録開始 2012/2/7 反応語追加 ※随時調整中 ■プロフィール履歴 超個人的趣味の試運転中(・ω・`。) ■無双6(+猛将伝)仕様の鍾会bot(非公式)。通常postは公式台詞のみ。返信はそれなりに作者の解釈、趣味が入った創作だったり、@6kyoibot @6komeibot @6bachobotと会話したりとか。■関連→@syoukaimeibun (2012/1/31) 無双6(+猛将伝)+orochi2仕様の鍾会bot(非公式&ネタバレ) /通常post→公式台詞 /返信・会話→超個人的趣味(・ω・`。) /会話→@6kyoibot @6komeibot @6bachobot @musosyutenbot @musoppoibot @syoukaimeibun他 ■(´∀`*) EasyBotter http //pha22.net/twitterbot/ http //www26.atwiki.jp/easybotter_wiki(wiki) twittbot http //twittbot.net/ ロリポップ http //lolipop.jp/ 天気予報 http //weather.livedoor.com/weather_hacks/webservice.html http //bot.sblo.jp/article/40400320.html(参考)
https://w.atwiki.jp/easybotter_wiki/pages/2.html
トップページ Read me 質問する前に 注意事項 ver.2.1版 機能追加ID別設定 乗っ取り対策 地震で自動停止させる ver.2.0beta版 設置手順前準備~設置編 最新のAPIに変更 手動実行編 エラー解決編 脱初心者編 機能追加時間分け 時間分けマスターになる為に reply replyTimeline postRandom postRotation ID別設定 よくある質問設定 OAuth関連 エラーは出ないのに… PHPエラー おまけ簡易ローカルチェック 不具合一覧 ver.1.42版 よくある質問OAuth関連 機能追加 脱初心者出来たら! その他Twitter Bot関連リンク Twitter Bot BBS(外部サイト) 更新履歴 取得中です。 ここを編集
https://w.atwiki.jp/easybotter_wiki/pages/30.html
時間作動をローカルチェックしたい人向け(簡易) ソースはTwitter Bot BBSから 1.下記のような構成のPHPファイルを作る。 2.そのファイルをPHPが使えるサーバーにアップさせる。 3.そのPHPファイルにアクセスする (エラーがある場合は、エラーログが出る) ●メインファイル html lang=ja head title PHP動作チェック用 /title body h3 動作チェック /h3 ?php require("読み出しファイル名"); ? hr /body /html 上記を適当な名前を付けて拡張子.php(PHPファイル)で保存する。 ●読み出しファイル(例) ?php if(date("G") 23 || date("G") 6){ echo "24時~5時に表示されるよ"; } elseif(date("G") 17 || date("G") 0){ echo "18時~23時に表示されるよ"; } elseif(date("G") 11 date("G") 18){ echo "12時~17時に表示されるよ"; } else{ echo "6時~11時に表示されるよ"; } ? こちらも同様に適当な名前を付けて拡張子.php(PHPファイル)で保存する。 直接メインファイルに書いても効果があるが、別ファイルにしておく事で 書き換えたい場合、こちらのファイルを書き直すだけで済む。 読み出しファイルなので必要に同じ書き換えてください。 リプライパターンファイルの簡易チェック 上記のメインファイルをreply_pattern.phpと同じディレクトリに入れるかディレクトリを参照させる。 上記のメインファイルの ?php require("読み出しファイル名"); ? とあるところを ?php require("reply_pattern.php"); print_r($data); ? と書き換える。 または 同時に調べたい場合は hr の下に付け加える h3 リプライパターン定義チェック /h3 ?php require("reply_pattern.php"); print_r($data); ? hr 結果の表示は、しっかりと定義されたかどうか。 { } , " の過不足など、エラーチェックができる。 ただし、正規表現は対象外。
https://w.atwiki.jp/easybotter_wiki/pages/15.html
質問スレで質問する前に読むこと! 56と 161引用 初心者スレ利用者は以下のテンプレを使用してください。 【バージョン】 【設置鯖名】 レン鯖名/自宅鯖 【PHPのバージョン】 【実行】 CRON鯖名/ブラウザ自動更新/手動/他 【手動】 動く/動かない 【不明点など】 (エラーメッセージがあればコピペ推奨) また、思いつく単語をこのスレと関連スレで検索してください。 リプライ:リプ、@、replyなどで検索 タイムライン:TL、タイムラインなどで検索 CRON:CRON、bot.phpなどで検索 二重投稿:二重投稿、if、bot.phpなどで検索 リプライと同時に他のポストをする:bot.php、ifなどで検索 via~変更:http //twitter.com/oauth_clients スクリプト初体験の方は、PHPリファレンスで最低限の勉強 正規表現(メタ文字) 演算子 比較演算子 条件分岐(if、switch) date関数 ここまで